【Lombok原理1】自定义注解处理器
更新日期:
[TOC]
1. java编译过程
在搞清楚Lombok的原理之前, 首先看下java编译的基本过程。如图是OpenJDK提供的过程图, 大致分为三个步骤:
Parse and Enter
编译器会将java文件解析成Abstract Syntax Tree (AST),即抽象语法树
,这个过程会校验语法的正确性等等。Annotation Processing
在这个过程中自定义的注解处理器将会被调用,在这个过程中你可以对语法树进行校验(如checkstyle所做的),你也可以生成新的java文件等等。Analyse and Generate
最后一步编译器就会根据抽象语法树生成对应的字节码(class文件)。
2. 自定义HelloWorld注解处理器
这样看来我们要想实现类似lombok的功能,看起来就好像很简单,那就是在完成上述的第二部操作
。
所有代码可以参考:https://github.com/IceMimosa/apt
2.1 定义一个注解
1 | (ElementType.TYPE) |
2.2 定义一个处理器
定义一个处理器, 继承AbstractProcessor
类。
1 | @SupportedAnnotationTypes({"io.patamon.apt.annotation.TestAnnotation"}) |
2.3 注册处理器服务
在resources目录下新建目录META-INF/services
,新建文件javax.annotation.processing.Processor
,内容如下:
1 | io.patamon.apt.processor.TestProcessor |
2.4 测试注解
注意:测试的类不要和注解处理在同一个模块(或jar包),不然编译的时候会报类找不到的错误。
1 | @TestAnnotation(name = "TestAnnotationName") |
2.5 查看效果
1、 如果是在IDEA中测试,需要打开注解编译
,位置: Preferences > Build, Execition, Deployment > compiler > Annotation Processors
或者pom.xml中添加build配置,IDEA会自动打开和关闭,详细可以参考代码。
1 | <plugin> |
此时我们点击build > Rebuild Project
,会在IDEA的message控制台
看到如下信息:
2、 在控制台执行mvn clean package -DskipTests
需要在pom的build中添加tools.jar
的配置
1 | <plugin> |
3. 参考

- hive处理增量数据 | Ice の Mimosa
- 【Lombok原理3】实现一个简单的lombok | Ice の Mimosa
- Spark ALS应用与理解 | Ice の Mimosa
- 【转】Https前世今生 | Ice の Mimosa
- hive解决元数据乱码 | Ice の Mimosa
- JVM学习05-字节码执行过程和JVM指令集 | Ice の Mimosa
- Ice の Mimosa